#include"LinkTree.h"
#include<stdio.h>
#include<string.h>
#include<dirent.h>
#define true 1
#define false 0
int isEqual(char *str1,char *str2)
{
    if(strcmp(str1,str2)==0)
        return true;
    else
        return false;
}
// int main()
// {
//     LTree tree;
//     InitTree(&tree);

//     TNode *node1=CreateTreeNode("243class");
//     TNode *node2=CreateTreeNode("aba");
//     TNode *node3=CreateTreeNode("bcb");
//     TNode *node4=CreateTreeNode("ded");
//     ConnectBranch(node1,node2);
//     ConnectBranch(node1,node3);
//     ConnectBranch(node1,node4);

//     TNode *node5=CreateTreeNode("247class");
//     TNode *node6=CreateTreeNode("rre");
//     TNode *node7=CreateTreeNode("dja");
//     TNode *node8=CreateTreeNode("fis");
//     ConnectBranch(node5,node6);
//     ConnectBranch(node5,node7);
//     ConnectBranch(node5,node8);

//     ConnectBranch(tree.root,node5);
//     ConnectBranch(tree.root,node1);

//     Travel(&tree);
//     printf("len:%d\n",GetTreeHeight(tree.root));
//     printf("child count:%d\n",GetChildCount(node1));
    
//     TNode *findnode=FindNode(tree.root,"bcb",isEqual);
//     findnode->data="bbb";
//     Travel(&tree);

//     LTree newTree;
//     newTree.root=CopyTree(tree.root);
//     Travel(&newTree);
//     FreeTree(&tree);
//     return 0;
// }

void ExploreDirctory(const char *path,TNode *node)
{
    DIR  *dir=opendir(path);
    if(dir==NULL)
        return;
    struct dirent *entry;
    while((entry=readdir(dir)) != NULL)
    {
        if(strcmp(entry->d_name,".")==0 || strcmp(entry->d_name,"..")==0)
            continue;;
        TNode *fileNode=CreateTreeNode(entry->d_name);
        ConnectBranch(node,fileNode);
        if(entry->d_type==4)
        {
            char fullPath[100]={0};
            strcpy(fullPath,path);
            strcat(fullPath,"/");
            strcat(fullPath,entry->d_name);
            ExploreDirctory(fullPath,fileNode);
        }
    }
    closedir(dir);
}


int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        printf("invalid input number!\n");
        return 0;
    }
    LTree tree;
    InitTree(&tree);
    ExploreDirctory(argv[1],tree.root);
    Travel(&tree);
    FreeTree(&tree);
    return 0;
}